<?php

namespace Sharks\Core\Http\Routing;

use Sharks\Core\Support\Bag\ParameterBag;

/**
 * 中间件集合
 */
class MiddlewareCollection {

    private $collection;

    public function __construct() {
        $this->collection = new ParameterBag;
    }

    /**
     * 注册中间件
     * @param  string $name  中间件名称
     * @param  string $class 中间件实现类
     * @param  string $desc  中间件描述
     */
    public function register($name, $class, $desc = null) {
        $this->collection->put($name, array('name'=>$name, 'class'=>$class, 'desc'=>$desc));
    }

    /**
     * 获取所有中间件集合
     * @return array 中间件集合
     */
    public function all() {
        return $this->collection->all();
    }

    /**
     * 合并两个中间件集合
     * @param  MiddlewareCollection $c 中间件集合
     */
    public function merge(MiddlewareCollection $c) {
        foreach ($c->all() as $name => $middleware) {
            $this->register($name, $middleware['class'], $middleware['desc']);
        }
    }

    /**
     * 依据名称获取中间件
     * @param  string $name 中间件名称
     * @return array    中间件
     */
    public function get($name) {
        return $this->collection->get($name);
    }
}